/*!
 * Crypto-JS v1.1.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
const Crypto = require('./crypto.js');

(function() {
  // Shortcut
  var util = Crypto.util

  Crypto.HMAC = function(hasher, message, key, options) {
    // Allow arbitrary length keys
    if (key.length > hasher._blocksize * 4) {
      key = hasher(key, {
        asBytes: true
      })
    } else {
      key = util.stringToBytes(key)
    } // XOR keys with pad constants

    var okey = key
    var ikey = key.slice(0)
    for (var i = 0; i < hasher._blocksize * 4; i++) {
      okey[i] ^= 92
      ikey[i] ^= 54
    }

    var hmacbytes = hasher(
      util.bytesToString(okey) +
                hasher(util.bytesToString(ikey) + message, {
                  asString: true
                }),
      {
        asBytes: true
      }
    )
    return options && options.asBytes ? hmacbytes : options && options.asString ? util.bytesToString(hmacbytes) : util.bytesToHex(hmacbytes)
  }
})()

module.exports = Crypto
